home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / internet / irc_i_dodatki / kuang / kuangeleven28.lha / Rexx / Aminetfind.amirx next >
Text File  |  1997-02-04  |  5KB  |  168 lines

  1. /*) FASTAminetFind v2.2 by Josef Faulkner (panther@gate.net) IRC: Josef
  2. \\\ Written for Grapevine 2.0 beta
  3.  
  4. "Converted" by Ariel Magnum to AmIRC Arexx
  5. 1. Fixed/extended cmd parsing and handling
  6.    so you can now use the AmIRC RAW output commands as :
  7.    /find mui36usr raw notice Ariel
  8.    will send the results to me via notice but will not be displayed on your
  9.    amirc lister(hence RAW).
  10.  
  11. 2. Added AmIRC prefix to echos
  12. 3. Added variable of the aminet search site
  13.  
  14. Change it here and note that not all aminet sites support Aminet
  15. find.
  16. */
  17. aminetsite='ftp.wustl.edu'
  18. /*
  19. /// 
  20. \\\ Usage:
  21. /// /alias find rx aminetfind.gvrexx
  22. \\\ /find [EXACT] <"substring"|"sub strings"> [output] [-w<width>] [-m<items>]
  23. ///
  24. \\\ Output is the command that will be launched with the results as the argument
  25. ///
  26. \\\ Examples:
  27. /// /find shapeshift echo
  28. \\\ «Echo» | ssfaq09.lha        docs/help   48K   3 ShapeShifter FAQ 0.9 (preliminary)
  29. /// «Echo» | MacRomTest.lha     misc/emu     1K   9 Shows version & verifies ShapeShifte
  30. \\\ ...
  31. /// Other examples:
  32. \\\ /find shapeshift msg josef    - sends output in a message to josef
  33. /// /find shapeshift say          - sends output to the channel
  34. \\\ /find shapeshift me           - if your nick is Aminet, this might be good :)
  35. /// /find "irc client"            - Searches for anything with "irc" AND "client"
  36. \\\ /find "irc client" say        - and sends it to the channel
  37. /// /find exact "irc client"      - Searches for anything with "irc client" exactly
  38. \\\ /find exact "irc client" say  - and sends it to the channel
  39. /// /find grapevine say -m1       - Shows only one line of output
  40. \\\ /find grapevine say -m5       - Shows 5 lines of output
  41. /// /find grapevine say -w120     - Truncates output to 120 characters
  42. \\\ /find grapevine say -w60 -m10 - Shows up to 10 lines truncating to 60 width
  43. /// /find "comm/net irc grape"    - Will search for comm/net (the directory)
  44. \\\ /find exact "
  45. ///
  46. \\\ Set maxsend to the maximum number of lines to send (does not affect echo)
  47. ///
  48. \\\ New Stuff:
  49. /// 1.1:
  50. \\\ o  Now searches for multiple keywords...
  51. /// 1.2:
  52. \\\ o  Now searches for two or more words exactly.  Use " quotes around the
  53. ///    search string to do this.
  54. \\\ 2.0:
  55. /// o  Now you can set the maximum number of items (-m<num>)
  56. \\\ o  Now you can set the maximum length of hte line (-w<num>)
  57. /// 2.1:
  58. \\\ o  bugfixes
  59. /// 2.2:
  60. \\\ o  Now reports errors more exactly (none found, maximum matches)
  61. /// Notes:
  62. \\\ o  If you search for more than one keyword you MUST put it in quotes.
  63. /// o  Quotes must be " quotes, not ' quotes.
  64. \\\ o  - options MUST be the last options on the line.
  65. (*/
  66.  
  67. if ~show('L','rexxsupport.library') then if ~addlib('rexxsupport.library',0,-30,0) then do
  68.     'echo P=«Aminet» You need rexxsupport.library version 30 or greater in libs:'
  69.     exit 10 
  70. end
  71.  
  72. maxchansend=5
  73. maxechosend=20
  74. width=70
  75.  
  76. bold=d2c(2)
  77.  
  78. parse arg cmds
  79. do while left(word(cmds,words(cmds)),1)='-'
  80.     lw=upper(word(cmds,words(cmds)))
  81.     lc=left(lw,2)
  82.     num=right(lw,length(lw)-2)
  83.     if lc='-M' then do
  84.         maxchansend=num
  85.         maxechosend=num
  86.     end
  87.     if lc='-W' then do
  88.         width=num
  89.     end
  90.     cmds=reverse(cmds)
  91.     parse var cmds .' 'cmds
  92.     cmds=reverse(cmds)
  93. end
  94. if upper(word(cmds,1))='EXACT' then do
  95.     exact=1
  96.     parse var cmds .' 'cmds
  97. end
  98. else exact=0
  99. if index(cmds,'"')>0 then do
  100.     parse var cmds '"'name'"' cmd
  101. end
  102. else do
  103.     parse var cmds name' 'cmd
  104. end
  105. if exact then name='"'name'"'
  106. if ~showlist(H,'TCP') then address command 'mount TCP: from amitcp:devs/inet-mountlist'
  107. if ~showlist(H,'TCP') then address command 'mount TCP:'
  108. if showlist(H,'TCP') then do
  109.     if cmd='' then cmd='echo'
  110.     name=strip(name)
  111.     otext='Finding: '
  112.     if exact then otext=otext||'(exact) '
  113.     otext=otext||bold||name||bold
  114.     cmd=strip(cmd)
  115.     if cmd~='' then otext=otext||', output command 'bold||cmd||bold
  116.     otext=otext||', width 'bold||width||bold
  117.     if upper(cmd)~='ECHO' then do
  118.         length=maxchansend
  119.         otext=otext||', maxlength 'bold||maxchansend||bold
  120.     end
  121.     else do
  122.         length=maxechosend
  123.         otext=otext||', maxlength 'bold||maxechosend||bold
  124.     end
  125.     otext=otext||'.'
  126.     if address()='REXX' then say 'Finding 'name
  127.     else 'echo P=«Aminet» 'otext
  128.  
  129.     outcmd=cmd
  130.     Select
  131.     when upper(outcmd)='ECHO' then outcmd='ECHO P=«Aminet»'
  132.     when pos('RAW',upper(outcmd))=1 then do
  133.         parse var outcmd . tcmd tnick
  134.         outcmd='RAW' tcmd tnick ':'
  135.     end
  136.     when upper(outcmd)~='SAY' then outcmd='SAY /'outcmd
  137.     otherwise
  138.     end
  139.     call open(2,'t:a',w)
  140.     if open(1,'tcp:'aminetsite'/1848',w) then do
  141.         call writeln(1,'max 'length)
  142.         call writeln(1,'width 'width)
  143.         call writeln(1,'find 'name)
  144.         call writeln(1,'max')
  145.         cnt=0
  146.         do until eof(1)
  147.             text=readln(1)
  148.             call writeln(2,text)
  149.             if text='Missing argument.' then leave
  150.             else do
  151.                 if address()='REXX' then say text
  152.                 else do
  153.                     select
  154.                         when left(text,6)='*** No' then outcmd 'No Matches Found.'
  155.                         when left(text,6)='*** Ad' then outcmd 'Additional Matches Found (use higher -m value for more).'
  156.                         otherwise outcmd' 'text
  157.                     end
  158.                 end
  159.             end
  160.             cnt=cnt+1
  161.             if (cnt>=maxsend)&(upper(cmd)~='ECHO') then leave
  162.         end
  163.         call writeln(1,'quit')
  164.     end
  165.     else 'echo P=«Aminet» Error opening TCP:'
  166. end
  167. else 'echo P=«Aminet» You need AmiTCP installed in the proper directories, or mount TCP:'
  168.